A digital computer system typically includes a memory for storing instructions (collectively said to constitute a "program") and operands (collectively constituting "data") to be operated upon by the instructions. It typically also includes a means for fetching the instructions from memory, decoding them, fetching from memory the operands called for by the instructions, performing upon the operands the operations called for by the instructions, and storing the modified operands back in memory.
Some of the operations called for by the instructions may be arithmetic operations, requiring two operands to be added or multiplied, one to be subtracted from the other, or one to be divided into the other.
A memory unit typically has a certain number of bits that it can store and retrieve in a single operation, commonly known as a the "word size" of the memory. The data paths ("buses" and registers) within the computer system typically are provided to handle the same word size. Typical word sizes are sixteen or thirty-two bits.
For most efficient operation of a computer system, operand size should be limited to the word size; however, such an approach might not suit the needs of the user. Therefore, many computer systems have provision for performing computations on operands that must be stored and passed around the system in several words.
To enhance the ease of programming such systems, it is customary to require the programmer to specify the starting memory location of an operand (the location of what is commonly called the "MSD", the most significant digit, of the operand). However, the computations must begin with the LSD (the least significant digit) of the operand, so that carries may propagate a properly. Where an operand spans several words, the execution hardware must determine the LSD address from the MSD address and operand characteristics and length.
An additional complication occurs when operands occupy some thing other than an integral number of computer words, as is often the case in systems which accommodate representations of decimal numbers (as opposed to requiring that all numbers be translated to their binary equivalents). Such systems typically represent decimal numbers in BCD (binary-coded decimal), which requires four bits to store a decimal digit, or in some standard data transmission code such as ASCII code or EBCDIC code, which require eight bits to store a decimal digit. This means that several digits can be stored in one sixteen-bit or thirty-two-bit word.
For the convenience of the user-programmer, it is not customary to require that operands completely occupy words, or that they begin or end on word boundaries. Thus, for such operands, the arithmetic execution hardware must not only determine the address of the word containing the LSD, but must further deter mine where within a word the LSD resides, and where within a word a the MSD resides. Further, the hardware must not disturb bits that are not part of a current operand within a word partially occupied by the current operand.
The manipulations that the execution hardware must perform to facilitate these considerations result in overhead, with a commensurate reduction in efficiency and throughput.
It is thus a general object of the present invention to pro vide improved digital computer systems.
It is a particular object of the present invention to increase the efficiency of the arithmetic elements of computer systems.